#ifndef USERCHATWINDOW_H
#define USERCHATWINDOW_H

#include "Call_for_deepseek.hpp"
#include "openai/nlohmann/json.hpp"
#include "tools/markdownTohtml.hpp"

#include <QAction>
#include <QDateTime>
#include <QFileDialog>
#include <QFrame>
#include <QHBoxLayout>
#include <QInputDialog>
#include <QLabel>
#include <QLineEdit>
#include <QListWidget>
#include <QMenu>
#include <QMessageBox>
#include <QPushButton>
#include <QScrollArea>
#include <QSplitter>
#include <QTextEdit>
#include <QVBoxLayout>
#include <QWidget>
#include <memory>
#include <string>

struct ChatMessage {
  QString role; // "user" 或 "assistant"
  QString content;
  QString time;
};

struct ChatSession {
  QString id;
  QString name;
  QVector<ChatMessage> messages;
  bool isSelected = false;
};

class UserChatWindow : public QWidget {
  Q_OBJECT
public:
  explicit UserChatWindow(QWidget *parent = nullptr);
  // 设置当前用户ID
  void setUserId(const QString &userId);
private slots:
  void onSendButtonClicked();
  void onNewChatClicked();
  void onHistoryItemClicked(QListWidgetItem *item);
  void onDeleteChatClicked();
  void toggleChatMode();

  // 历史列表右键菜单操作
  void showHistoryContextMenu(const QPoint &pos);
  void renameChatSession();
  void exportChatSession();
  void importChatSessions();

private:
  // UI设置方法
  void setupUI();
  void setupChatHistory();
  void setupSignalsAndSlots();
  QWidget *createInputArea();

  // 消息显示和处理
  void addMessageToChat(const QString &content, const QString &role);
  void displayCurrentChat();
  void updateChatDisplay();
  QString getCurrentTimeString() const;
  void addMessageWidget(const ChatMessage &message);
  QString formatMessageContent(const QString &content);

  // 发送消息相关的辅助方法
  QWidget *createWaitingIndicator();
  void removeWaitingIndicator();
  std::string preparePrompt(const QString &userText);
  void updateHistoryListItem();

  // 数据操作
  void saveChats();
  void loadChats();

  // 初始化当前用户的聊天目录
  void initUserDirectory();
  // 创建新的聊天会话文件
  QString createNewSessionFile();
  // 加载用户的所有聊天会话
  void loadUserSessions();

  // UI 组件
  QListWidget *historyList_;
  QTextEdit *chatArea_;            // 输入区
  QScrollArea *chatScrollArea_;    // 会话显示区
  QWidget *chatContentWidget_;     // 会话显示区的内容容器
  QVBoxLayout *chatContentLayout_; // 消息垂直布局
  QPushButton *newChatButton_;     // 新建会话按钮
  QPushButton *sendButton_;        // 发送按钮
  QPushButton *chatModeButton_;    // 聊天模式切换按钮
  QPushButton *deleteChatButton_;  // 删除会话按钮

  // 数据管理
  QVector<ChatSession> chatSessions_;
  int currentChatIndex_ = -1;
  bool continuousMode_ = false;
  QString userId_;        // 当前用户的ID
  QString userDirectory_; // 用户聊天记录存储目录

  Deepseek_call dcall_;

  std::shared_ptr<MarkdownTransHtml> markdownTohtml;
};

#endif // USERCHATWINDOW_H
